/**
 * 首先有一个数组A。
 * 然后依次处理每一个Bi，从A1往后走，找到第一个小于等于Bi的位置，将其记作Bi的答案
 * 一共M个Bi，求答案
 * 将B排序，然后依次去找答案。注意到对于后面的Bi而言，无需再从A1开始找
 * 只需要从当前位置开始即可。因此整个查找过程是O(N)的。
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;
using pii = pair<int, int>;
using pll = pair<llt, llt>;

int N, M;
vi A;
vector<pii> B;
vi Ans;

void work(){
    cin >> N >> M;
    A.assign(N, {});
    for(auto & i : A) cin >> i;
    B.assign(M, {});
    int k = 0;
    for(auto & p : B){
        cin >> p.first;
        p.second = k++;
    }

    Ans.assign(M, -1);
    sort(B.begin(), B.end(), [](const pii & a, const pii & b)->bool{
        if(a.first != b.first) return a.first > b.first;
        return a.second < b.second;
    });

    k = 0;
    for(int a,i=0;i<N;++i){
        a = A[i];
        while(k < M and B[k].first >= a){
            Ans[B[k].second] = i + 1;
            k += 1;
        }
    }
    for(auto i : Ans) cout << i << "\n";
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}